//[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[
/**
 *
 *	@file		imc_hand.c
 *	@brief		ハンドシステム	タッチパネルの動きにより動作させるシステム
 *	@author		tomoya takahashi
 *	@data		2005.09.23
 *
 */
//]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]

#include <string.h>
#include "system.h"

#define __IMC_HAND_H_GLOBAL
#include "include/application/imageClip/imc_hand.h"

//-----------------------------------------------------------------------------
/**
 *					定数宣言
*/
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
/**
 *					構造体宣言
*/
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
/**
 *					プロトタイプ宣言
*/
//-----------------------------------------------------------------------------
static void default_hand_func( IMC_HAND* hand );


//----------------------------------------------------------------------------
/**
 *
 *	@brief	ハンド構造体初期化 / 破棄
 *
 *	@param	hand	ハンド構造体
 *
 *	@return	none
 *
 *
 */
//-----------------------------------------------------------------------------
void IMC_HAND_Init( IMC_HAND* hand )
{
	memset( hand, 0, sizeof(IMC_HAND) );

	hand->push		= default_hand_func;
	hand->pop		= default_hand_func;
	hand->push_ing	= default_hand_func;
}

//----------------------------------------------------------------------------
/**
 *
 *	@brief	ハンドシステムメイン関数
 *
 *	@param	hand	ハンド構造体
 *
 *	@return	none
 *
 *
 */
//-----------------------------------------------------------------------------
void IMC_HAND_Main( IMC_HAND* hand )
{
	// トリガチェック
	if( sys.tp_trg ){

		hand->push( hand );
	}else{

		// コントチェック
		if( sys.tp_cont ){

			hand->push_ing( hand );
		}else{

			// １つ前のコントチェック
			if( hand->old_cont ){

				hand->pop( hand );
			}
		}
	}

	// 前のデータ更新
	hand->old_x		= sys.tp_x;
	hand->old_y		= sys.tp_y;
	hand->old_cont	= sys.tp_cont;
}

//----------------------------------------------------------------------------
/**
 *
 *	@brief	ハンド構造体を破棄
 *
 *	@param	hand	ハンド構造体
 *
 *	@return	none
 *
 *	ハンド構造体内に設定されている破棄関数を実行します。
 *
 *	なでこのようにしたか。
 *		今どんなハンドシステムを使用しているかを覚えておかなくても
 *		この関数を実行さえすれば完全に破棄されるようにするため
 *
 */
//-----------------------------------------------------------------------------
void IMC_HAND_Delete( IMC_HAND* hand )
{
	if(hand->dest){
		hand->dest( hand );
	}
}




static void default_hand_func( IMC_HAND* hand )
{
}